from langchain_experimental.tools.python.tool import PythonREPLTool
from app.bailian.common import llm
from langchain_core.prompts import PromptTemplate
from langchain.agents import initialize_agent, AgentType

# 注册可用工具
tools = [PythonREPLTool()]
toolnames = ["PythonREPLTool"]

# 创建代理
agent = initialize_agent(
    tools=tools,
    llm=llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    verbose=True,
)

# 创建提示词模板
prompt_template = PromptTemplate.from_template(template="""
尽你所能回答以下问题或执行用户的命令，如果需要请使用Python编程语言，并使用[{tool_names}]工具。
--
```
# 思考的过程
- 请按照以下格式进行思考：
- 问题：你必须回答的输入问题
- 思考：你考虑应该怎么做
- 行动：要采取的行动，必须是[{tool_names}]工具中的一个
- 行动输入：行动的输入参数
- 观察：行动的结果
...（可以有多个思考/行动/观察的循环）
最终答案：对原始输入问题的最终答案
```
--
注意：
- PythonREPLTool工具的入参是Python代码字符串，请确保代码正确无误且能直接运行。
--
问题：{input}
""")

# 组合成最终提示词
prompt = prompt_template.format(
    tool_names=", ".join(toolnames), 
    input="""
    要求：
    1. 向 E:\private\AIWorks\AIAgentTest\app\.temp 目录写入一个名为 index.html 的新文件。
    2. 写一个在线教育产品的官网，包含4个tab,分别是首页、实战课、体系课和关于我们。
    3. 首页包含产品介绍、用户评价和常见问题。
    4. 实战课和体系课分别列出5门课程，每门课程包含课程名称、简介和价格。
    5. 关于我们包含公司简介、团队成员和联系方式。
    """
)

# 调用代理进行推理
response = agent.invoke(prompt)
print(response)